#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>

#define Port 8080
// int main(int argc,char *argv[])
// {
//     if(argc!=2)
//     {
//         printf("invalid number!\n");
//         return -1;
//     }
//     int sock=socket(AF_INET,SOCK_DGRAM,0);    //udp
//     if(sock<0)
//     {
//         perror("socket:");
//         return -1;
//     }
//     struct sockaddr_in addr;    //结构体
//     addr.sin_family=AF_INET;    //协议族
//     addr.sin_port=htons(Port);  //端口号
//     addr.sin_addr.s_addr=inet_addr(argv[1]);    //ip地址
// 
//     while(1)
//     {
//         char temp[100]={0};
//         scanf("%[^\n]",temp);
//         while(getchar()!='\n');
//         if(sendto(sock,temp,100,0,(struct sockaddr*)&addr,sizeof(addr))<0)
//         {
//             perror("sendto:");
//         }
//     }
//     close(sock);
//     return 0;
// }

int main(int argc,char *argv[])
{
    if(argc!=2)
    {
        printf("invalid number!\n");
        return -1;
    }
    int sock=socket(AF_INET,SOCK_DGRAM,0);
    if(sock<0)
    {
        perror("socket:");
        return -1;
    }
    struct sockaddr_in addr;    //结构体
    addr.sin_family=AF_INET;    //协议族
    addr.sin_port=htons(Port);  //端口号
    addr.sin_addr.s_addr=inet_addr(argv[1]);    //ip地址

    // while(1)
    // {
    //     char temp[100]={0};
    //     scanf("%[^\n]",temp);
    //     while(getchar()!='\n');
    //     if(sendto(sock,temp,100,0,(struct sockaddr*)&addr,sizeof(addr))<0)
    //     {
    //         perror("sendto:");
    //     }
    // }

    if(bind(sock,(struct sockaddr*)&addr,sizeof(addr))!=0)
    {
        perror("bind:");
    }
    while(1)
    {
        char temp[100]={0};
        struct sockaddr_in clientAddr;
        socklen_t len;
        if(recvfrom(sock,temp,100,0,(struct sockaddr *)&clientAddr,&len)<=0)
        {
            perror("recvform:");
        }
        printf("ip:%s  port:%d\n",inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port));
        printf("recv data:%s\n",temp);
    }
    close(sock);
    return 0;
}